package com.custom.base.base

import android.app.Activity
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.view.View
import android.widget.RelativeLayout
import android.widget.TextView
import androidx.appcompat.widget.Toolbar
import com.google.android.material.appbar.AppBarLayout
import com.custom.base.config.BaseConfig
import com.custom.base.type.*
import com.custom.base.R
import kotlinx.android.synthetic.main.act_base.actBaseBackIv
import kotlinx.android.synthetic.main.act_base.actBaseBackIv_two


/**
 * 作者：
 * 时间：2020/5/11
 * 描述：
 **/
abstract class BaseAppCompatActivity : AnimationActivity() {
    protected lateinit var mActivity: Activity

    /**
     * 获取savedInstanceState
     */
    open fun getSavedInstanceState(savedInstanceState: Bundle?) {}
    /**
     * 初始化参数
     *
     * @param intent
     */
    open fun initIntent(intent: Intent) {}
    /**
     * 初始化参数
     *
     * @param parms
     */
    open fun initParms(bundle: Bundle) {}
    /**
     * 初始化参数
     */
    open fun initBar() {}
    /**
     * 结束动画
     */
    open fun finishAnimation():AnimationActivityType{
        return AnimationActivityType.NO
    }
    /**
     * 设置横竖屏
     */
    open fun setOrientation(): OrientationType { return OrientationType.VERTICAL}
    /**
     * 设置title和内容排列方式
     */
    open fun setTitleLayoutType(): BaseLayoutType { return BaseLayoutType.COLUMN}
    /**
     * 设置联动状态
     */
    open fun setTitleLinkage() : LinkageType { return LinkageType.NO
    }
    /**
     * 设置状态栏状态
     */
    open fun setStatusBarType() : StatusBarType { return StatusBarType.Dark
    }
    /**
     *获取绑定布局
     */
    abstract fun bindLayout(): Int
    /**
     * 背景颜色
     * @return
     */
    open fun setBgColor(): Int {
        return Color.parseColor("#f8f9fe")
    }

    /**
     * 设置title右边文本集合
     */
    open fun setTitleRightTextView(): List<String> {
        return listOf()
    }
    /**
     * 设置title右边文本集合
     */
    open fun setTitleRightTextViewBundle(bundle: Bundle): List<String> {
        return listOf()
    }
    /**
     * 设置title右边图片集合
     */
    open fun setTitleRightImageView(): List<Int> {
        return listOf()
    }
    /**
     * 设置title右边图片集合
     */
    open fun setTitleRightImageViewBundle(bundle: Bundle): List<Int> {
        return listOf()
    }
    /**
     * 设置title右边文本颜色
     */
    open fun setTitleRightTextViewColor():Int{
        return if(setTitleLayoutType() == BaseLayoutType.COLUMN) BaseConfig.getInstance.getTitleRightTvColor() else Color.parseColor("#ffffff")
    }
    /**
     * 设置title右边文本点击回调
     */
    open fun onTitleRightClickListener(index: Int, view: View) {}
    /**
     * 设置title右边文本点击回调
     */
    open fun onTitleRightClickListenerBundle(index: Int, view: View, bundle: Bundle) {}
    /**
     * 状态栏颜色
     * @return
     */
    open fun setStatusBarColor(): Int {
        return Color.parseColor("#FFffffff")
    }
    /**
     * title背景颜色
     * @return
     */
    open fun setTitleBgColor(): Int {
        return if(setTitleLayoutType() == BaseLayoutType.COLUMN) BaseConfig.getInstance.getTitleBgColor() else Color.parseColor("#00000000")
    }

    /**
     * 右边文字背景
     * @return
     */
    open fun setRightTitleBgRes(): Int {
        return R.drawable.draw_white_bg
    }
    /**
     * 初始view完毕
     */
    open fun initView(){}
    /**
     * 初始view完毕
     */
    open fun initViewBundle(bundle: Bundle){}

    /**
     * 是否显示返回键
     */
    open fun setTitleBackVisibility():Boolean{ return true }
    /**
     * 是否显示分割线
     */
    open fun setTitleDividingLineVisibility():Boolean{ return false }

    /**
     * 是否显示title
     */
    open fun setTitleVisibility():Boolean{ return true }
    /**
     * 设置返回键图标
     */
    open fun setTitleBackRId():Int{ return if(setTitleLayoutType() == BaseLayoutType.COLUMN) R.drawable.icon_back_black else R.drawable.icon_back_white}
    open fun setTitleBackRIdTwo():Int{ return R.drawable.icon_back_black_arrow}
    open fun setShowTwoBackArrow():Boolean{ return true }

    /**
     * 返回键回调
     */
    open fun onBackListener(){
        finish()
    }

    override fun finish() {
        super.finish()
        when (finishAnimation()) {
            AnimationActivityType.TOP -> {
                overridePendingTransition(0, R.anim.dialog_exit_sliding_to_top)
            }
            AnimationActivityType.RIGHT -> {
                overridePendingTransition(0, R.anim.dialog_exit_sliding_to_right)
            }
            AnimationActivityType.BOTTOM -> {
                overridePendingTransition(0, R.anim.dialog_exit_sliding_to_bottom)
            }
            AnimationActivityType.LEFT -> {
                overridePendingTransition(0, R.anim.dialog_exit_sliding_to_left)
            }
            else -> {}
        }
    }
    /**
     * title加粗
     */
    open fun isTitleBold():Boolean{ return BaseConfig.getInstance.isTitleBold() }
    /**
     * 全屏显示
     */
    open fun setFullScreen():Boolean{ return false }

    /**
     * HOME 回调
     */
    open fun onHomeClickListener(){ }

    /**
     * 获取toolbar
     * 改背景色  setBackgroundColor()
     * 改返回键图标   setNavigationIcon()
     * 标题和返回按钮为白色
     *    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
     *    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
     */
    open fun getToolbarView(toolbar: Toolbar) {}

    open fun getTitleView(toolbar: RelativeLayout) {}

    /**
     * 获取AppBarLayout
     */
    open fun getAppBarLayoutView(actBaseAppBarLayout: AppBarLayout) {}

    /**
     * 显示Toolbar的菜单按钮
    title 标题
    icon 图标
    showAsAction 此属性有几个选择
    always：这个值会使菜单项一直显示在Action Bar上。
    ifRoom：如果有足够的空间，这个值会使菜单项显示在Action Bar上。
    never：这个值使菜单项永远都不出现在Action Bar上。
    withText：这个值使菜单项和它的图标，菜单文本一起显示。
    onItemSelect() 设置监听器
     */
    open fun setMenuId():Int{ return 0 }

    /**
     * 设置menu监听
     */
    open fun onMenuClickListener(itemId: Int) {}

    /**
     * 获取TitleTextView
     */
    open fun getTitleTextView(tv : TextView) {}

    /**
     * 获取TitleTextView 和intent参数
     */
    open fun getTitleTextViewBundle(tv : TextView,bundle : Bundle) {}
}